package top.canyue.word_range.utils;

import top.canyue.word_range.constant.StageConstant;
import top.canyue.word_range.pojo.po.Review;

import java.util.Calendar;
import java.util.Date;

public class StageUtil {

    // 定义 stage 的递增值
    private static final int[] STAGE_VALUES = {1, 2, 4, 7, 15, StageConstant.HAVE_MASTERED};

    /**
     * 更新 Review 实例的 review_date、stage 和 next_review_date
     *
     * @param review 传入的 Review 实例
     * @return 更新后的 Review 实例
     */
    public static Review updateReview(Review review) {
        // 获取当前时间
        Date currentDate = new Date();
        review.setReviewDate(currentDate);

        // 更新 stage
        int currentStage = getNextStage(review.getStage());
        review.setStage(currentStage);

        // 更新 next_review_date
        Date nextReviewDate = calculateNextReviewDate(currentDate, currentStage);
        review.setNextReviewDate(nextReviewDate);

        return review;
    }

    /**
     * 根据当前 stage 获取下一个 stage 值
     *
     * @param currentStage 当前 stage
     * @return 下一个 stage 值
     */
    private static int getNextStage(int currentStage) {
        if (currentStage == StageConstant.HAVE_MASTERED) return StageConstant.HAVE_MASTERED;
        for (int i = 0; i < STAGE_VALUES.length; i++) {
            if (STAGE_VALUES[i] == currentStage) {
                // 返回下一个 stage 值
                return STAGE_VALUES[(i + 1) % STAGE_VALUES.length];
            }
        }
        return 1; // 如果未找到匹配的 stageValue，返回默认值 1
    }

    /**
     * 根据当前日期和 stage 计算下一次复习日期
     *
     * @param currentDate 当前日期
     * @param stage       stage 值
     * @return 下一次复习日期
     */
    private static Date calculateNextReviewDate(Date currentDate, int stage) {
        if(stage == StageConstant.HAVE_MASTERED) return null;
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);
        calendar.add(Calendar.DAY_OF_YEAR, stage); // 增加 stage 天数
        return calendar.getTime();
    }
}
